/*
  读取INI文件为json文件
  BY WSDX233
*/


var tools = {
	//工具
	isInt:function(val){
		//字符串是否可以转换为int
		//判断：用于去除Section名称后面的数字
		return (! isNaN(parseInt(val)))&&(typeof parseInt(val) === typeof 0);
	},
	getNameInfo:function(name){
		//获取名称信息
		var obj = {
			name : null,
			id : -1
		};
		//返回的对象
		
		if(name.indexOf("_") != -1){
			obj.id = name.split("_")[1];
			obj.name = name.split("_")[0];
		}
		else
		{
			obj.name = name;
			obj.id = -1;
		}
		
		obj.id = (this.isInt(obj.id))?parseInt(obj.id):obj.id;
		//加载id
		//obj.name = (obj.id==-1)? name:name.substr(0,name.length-1);
		//获取名称
		
		return obj;
	},
	getBoolean:function(str){
		//输入字符串获取布尔值
		if(str == "true"){
			return true;
		}
		else if(str == "false"){
			return false;
		}
		else{
			return null;
		}
	}
};


function loadSection(name,str){
	//加载部分
	
	var section = {
		maps : {},
		name : null,
		id : -1
	};
	
	var secNamInfo = tools.getNameInfo(name);
	//获取该部分名称信息
	
	section.name = secNamInfo.name;
	
	section.id = secNamInfo.id;
	//设置部分名称信息
	
	
	var smaps = str.split("\n");
	//分割映射字符串
	
	for(var i = 0;i < smaps.length;i++){
		var ecores = smaps[i];
		//每个部分映射字符串
		var ecmap = getMap(ecores);
		//每个部分映射
		if(ecmap != null){
			section.maps[ecmap.key] = ecmap.value;
		}
	}
	//遍历加入映射
	
	return section;
}

function getMap(str)
{
	//获取映射(key和value)
	
	var map = {
		key:null,
		value:null
	};
	
	str = str.trim();
	//去除空白字符
	
	if(str.indexOf(":") == -1){
		//没有冒号分割
		return null;
	}
	
	var sdevide = str.indexOf(":");
	//获取第一个冒号，用于分开Key和Value
	
	map.key = str.substr(0,sdevide).trim();
	map.value = str.substr(sdevide+1,str.lenght).trim();
	//截取key和value
	
	if(tools.isInt(map.value)){
		//如果值是数字，则解析为数字
		map.value = parseInt(map.value);
	}
	
	if(tools.getBoolean(map.value) != null){
		//如果是boolean，则使用布尔值
		map.value = tools.getBoolean(map.value);
	}
	
	
	return map;
}

function loadINI(str){
	//加载INI文件
	
	var obj = {};
	//返回的对象
	
	var rblocks = str.split("[");
	//未分割的每个块字符串
	
	var sblocks = {};
	//块字符串
	
	for(var i = 0;i < rblocks.length;i++){
		var erblocks = rblocks[i];
		//每个块字符串（未分割）
		var esblocks = erblocks.split("]");
		//分割块字符串
		if(i > 0){
			sblocks[esblocks[0]] = esblocks[1];
			//加入块字符串
		}
	}
	
	var cores = sblocks.core.split("\n");
	//核心代码字符串
	
	for(var i = 0;i < cores.length;i++){
		var ecores = cores[i];
		//每个核心映射字符串
		var ecmap = getMap(ecores);
		//每个核心核心映射
		if(ecmap != null){
			obj[ecmap.key] = ecmap.value;
		}
	}
	
	
	for(var key in sblocks){
		if(key == "core"){continue;}
		//不读取"core"的内容
		
		
		var esection = loadSection(key,sblocks[key]);
		//加载每个部分
		
		if(esection.id == -1){
			//普通部分
			obj[esection.name] = esection.maps;
		}
		else{
			if(obj[esection.name] == null){
				obj[esection.name] = [];
			}
			//若无此数组，则新建数组
			var sectionObj = {};
			//新建片段对象
			
			sectionObj.name = esection.id;
			//设置对象名称
			
			
			for(var ek in esection.maps){
				//遍历加入映射
				sectionObj[ek] = esection.maps[ek];
			}
			//设置对象的名称和映射
			
			obj[esection.name].splice(((tools.isInt(esection.id))?parseInt(esection.id-1):0),0,sectionObj);
			//obj[esection.name].splice(0,0,sectionObj);
			//插入
		}
	}
	
	return obj;
}

